package com.eltsistemas.os.controller.veiculo;

import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.eltsistemas.adapter.Adapter;
import com.eltsistemas.hibernate.HibernateUtil;
import com.eltsistemas.os.dao.veiculo.BuscaPorId;
import com.eltsistemas.os.dao.veiculo.CilindradaDao;
import com.eltsistemas.os.dao.veiculo.FabricanteDao;
import com.eltsistemas.os.dao.veiculo.ModeloDao;
import com.eltsistemas.os.modelo.veiculo.Cilindrada;
import com.eltsistemas.os.modelo.veiculo.Fabricante;
import com.eltsistemas.os.modelo.veiculo.Modelo;

@Controller
@RequestMapping("/veiculo")
public class ModeloController {
	
	
	@RequestMapping("/adiciona")
	public String adiciona(Modelo modelo, String nomeCilindrada, String nomeFabricante)
	{
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		ModeloDao daoModelo = new ModeloDao(session);
		
		try
		{
			
			Long idCilindrada = new BuscaPorId(session).getId(nomeCilindrada, "Cilindrada");
			Long idFabri = new BuscaPorId(session).getId(nomeFabricante, "Fabricante");
			
			Cilindrada c = new Cilindrada();
			c.setId(idCilindrada);
			
			Fabricante f = new Fabricante();
			f.setId(idFabri);
			
			modelo.setCilindrada(c);
			modelo.setFabricante(f);
			
			daoModelo.adiciona(modelo);
			session.close();
			return "redirect:lista";	
		}
		catch(Exception e)
		{
			return "redirect:lista?valor=true";
		}
	}
		
	@RequestMapping("/lista")
	public String lista(Model model, boolean valor)
	{
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		ModeloDao daoModelo = new ModeloDao(session);
		CilindradaDao daoCilindrada = new CilindradaDao(session);
		FabricanteDao daoFabricante = new FabricanteDao(session);
		
		model.addAttribute("modelos", daoModelo.lista());
		model.addAttribute("cilindradas", daoCilindrada.lista());
		model.addAttribute("fabricantes", daoFabricante.lista());
		model.addAttribute("categorias", new Adapter().getCategoria());
		
		session.close();
		return "modelo";
	}
	
	@RequestMapping("/alterado")
	public String alterado(Modelo modelo, String nomeCilindrada, String nomeFabricante)
	{
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		ModeloDao daoModelo = new ModeloDao(session);
		
		try
		{
			
			Long idCilindrada = new BuscaPorId(session).getId(nomeCilindrada, "Cilindrada");
			Long idFabri = new BuscaPorId(session).getId(nomeFabricante, "Fabricante");
			
			Cilindrada c = new Cilindrada();
			c.setId(idCilindrada);
			
			Fabricante f = new Fabricante();
			f.setId(idFabri);
			
			modelo.setCilindrada(c);
			modelo.setFabricante(f);
			
			daoModelo.altera(modelo);
			session.close();
			return "redirect:lista";	
		}
		catch(Exception e)
		{
			return "redirect:lista?valor=true";
		}
	}

	@RequestMapping("/remover")
	public String remover(Modelo modelo)
	{
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();

		ModeloDao daoModelo = new ModeloDao(session);	
		daoModelo.remover( modelo );
		
		session.close();
		
		return "redirect:lista";
	}


}
